package com.yya.ratelimiter.annotation;


import com.yya.ratelimiter.enums.LimitType;
import com.yya.ratelimiter.enums.LimitationAlgorithmType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD) // 作用于controller方法上
@Retention(RetentionPolicy.RUNTIME) // 生命周期为运行时
public @interface RateLimit {
    /**
     * 定义redis中限流key前缀
     * exam:rate_limit:com.xxx.controller.XxxController-hello
     * 表示对XxxController中的hello方法进行限流
     * @return
     */
    String key() default "rate_limit:";


    /**
     * 限流时间，单位秒
     * @return
     */
    int time() default 60;

    /**
     * 限流时间内限流次数
     * @return
     */
    int count() default 100;


    /**
     * 限流类型：1、限制接口访问次数 2、限制ip访问次数
     * @return
     */
    LimitType limitType() default LimitType.DEFAULT;

    LimitationAlgorithmType algorithm() default LimitationAlgorithmType.CounterWindowAlg;
}
